// 这段代码是一个配置了Axios拦截器的示例，用于处理HTTP请求和响应。Axios是一个基于Promise的HTTP客户端，适用于浏览器和node.js。以下是对代码每一行的详细注释：
// 从axios库中导入axios，用于发起HTTP请求
import axios from 'axios'
// 导入Vue Router实例，用于在需要时改变路由
import router from "../router";

// 创建axios实例，配置基础路径和超时时间
const request = axios.create({
    baseURL: '/api', // API基础路径
    timeout: 5000    // 请求超时时间，单位为毫秒
})

// 添加请求拦截器
request.interceptors.request.use(config => {
    // 在发送请求之前设置请求头的内容类型为JSON
    config.headers['Content-Type'] = 'application/json;charset=utf-8';

    // 从sessionStorage中获取用户信息
    let userJson = sessionStorage.getItem("user")
    // 如果用户信息不存在，重定向到登录页面
    if (!userJson) {
        router.push("/login")
    }
    // 如果存在用户信息，可以在这里添加token等认证信息
    // config.headers['token'] = user.token; // 假设用户信息中包含token

    return config // 返回配置好的config
}, error => {
    // 请求错误处理
    return Promise.reject(error)
});

// 添加响应拦截器
request.interceptors.response.use(
    response => {
        let res = response.data; // 获取响应数据
        // 如果响应的类型是blob，直接返回数据（处理文件下载）
        if (response.config.responseType === 'blob') {
            return res
        }
        // 兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }
        return res; // 返回处理后的数据
    },
    error => {
        // 打印错误信息用于调试
        console.log('err' + error) 
        // 错误处理
        return Promise.reject(error)
    }
)

// 导出axios实例
export default request
// 此代码的主要功能是创建一个自定义的Axios实例并设置全局的请求和响应拦截器：

// 请求拦截器：在请求发送之前，可以进行一些预处理，如设置统一的Header、添加Token验证或者对请求参数进行加密。
// 响应拦截器：在接收到响应后，可以统一处理返回的数据，例如转换数据格式、错误处理或者基于特定条件重定向。
// 通过这种方式，你可以将所有的HTTP请求相关逻辑集中管理，使得代码更加模块化和易于维护。同时，这也为处理登录状态失效、统一错误处理等提供了便利。